<?php

namespace App;

use App\Models\EduFans;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use Notifiable,HasRoles;
    /**
     * The attributes that are mass assignable.
     * 可批量分配的属性
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','icon'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    //获取用户对应角色信息的方法
    public  function getRole(){
        //通过使用模型的whereIn方法可以查找某个字段在一定范围内的数据
        return Role::whereIn('name',$this->getRoleNames())->get();
    }
    //从EduFans表中查找到当前用户的粉丝
    public function fans(){
        return $this->belongsToMany(User::class,'edu_fans','user_id','fans_id');
    }
    //查找当前用户关注的用户
    public function follow(){
        return $this->belongsToMany(User::class,'edu_fans','fans_id','user_id');
    }
    //判断传递的用户对象是否是当前用户的粉丝
    public function isFans($user){
        //在语句最开始的地方加上(bool)是将结果转换成bool布尔类型????
        return  (bool)$this->fans()->where('fans_id',$user['id'])->first();
    }
    //网站刚注册用户没有图像,如果在用户数据表中每新增一个用户就自动添加一个默认图像的方式也可以实现但是不好,后期修改的时候要大批量改数据表中的数据,这个时候可以在User模型中定义一个方法来实现这样一个功能
    public function getAvatarAttribute(){
        //根据当前用户是否有icon图标进行判断
        //下面的写法就用了三元表达式的一种简写模式当$this['icon']为真就返回$this['icon'],否则为假的时候就取:后面的值
        return $this['icon'] ?: asset('/images/del.jpg');
    }

}
